/*
 * @Author: SongJiawei 2493088050@qq.com
 * @Date: 2025-04-14 14:59:08
 * @LastEditors: SongJiawei 2493088050@qq.com
 * @LastEditTime: 2025-06-03 00:30:39
 * @FilePath: \QtWuziqi\mainwindow.h
 */
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "GameModel.h"

/**
 * @brief 五子棋游戏主窗口类
 * 
 * 负责游戏界面显示和用户交互，包括：
 * - 绘制棋盘和棋子
 * - 处理鼠标点击落子
 * - 管理游戏菜单
 * - 播放游戏音效
 */

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    /**
     * @brief 构造函数
     * @param parent 父窗口指针
     * 
     * 初始化游戏界面和菜单，创建游戏模型实例
     */
    MainWindow(QWidget *parent = 0);
    
    /**
     * @brief 析构函数
     * 
     * 释放游戏模型资源，防止内存泄漏
     */
    ~MainWindow();

protected:
    // 绘制
    void paintEvent(QPaintEvent *event);
    // 监听鼠标移动情况，方便落子
    void mouseMoveEvent(QMouseEvent *event);
    // 实际落子
    void mouseReleaseEvent(QMouseEvent *event);

private:
    GameModel *game; // 游戏指针
    Type type; // 存储游戏类型
    int row, col; // 存储将点击的位置
    void initGame();
    void checkGame(int y, int x);

private slots:
    void chessOneByPerson(); // 人执行
    void chessOneByAI(); // AI下棋

    void initPVPGame();
    void initPVEGame();
};

#endif // MAINWINDOW_H
